home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1998 / MacHack 1998.toast / The Hacks! / Spotlight Hack / source / app.c < prev    next >
Encoding:
C/C++ Source or Header  |  1998-06-21  |  6.3 KB  |  269 lines  |  [TEXT/CWIE]

  1. // menu items
  2. #define mApple        128
  3. #define iAbout        1
  4.  
  5. #define mFile        129
  6. #define iClose        1
  7. #define iQuit        2
  8.  
  9. // dialog items
  10. #define iControl    1
  11. #define iOption        3
  12. #define iShift        4
  13. #define iCommand    5
  14.  
  15. #define iSize         7
  16. #define iSwitch        11
  17. #define iHideApps    12
  18.  
  19. #include <sound.h>
  20. #include "AppPrefs.h"
  21.  
  22. Boolean             gQuitting;
  23. DialogPtr             gDialog;
  24. SpotlightGlobals     *globptr;
  25. SpotlightPrefs        myPrefs;
  26.  
  27. void EventLoop(void);
  28. void DoMouseDown(EventRecord *event);
  29. void DoMenuCommand(long result);
  30. void AttemptQuit(void);
  31.  
  32. void main(void)
  33. {
  34.     Handle itemHan;
  35.     Rect itemRect;
  36.     short itemType;
  37.     GrafPtr oldPort;
  38.  
  39.     MaxApplZone();
  40.     
  41.     InitGraf(&qd.thePort);
  42.     InitFonts();
  43.     InitWindows();
  44.     InitMenus();
  45.     TEInit();
  46.     InitDialogs(nil);
  47.     InitCursor();
  48.  
  49.     PrefsLoad(&myPrefs);
  50.     if (Gestalt('liTE', (long*)&globptr) != noErr) globptr = nil;
  51.  
  52.     itemHan = GetNewMBar(128);
  53.     if (itemHan == nil) return;
  54.     SetMenuBar(itemHan);
  55.     DisposeHandle(itemHan);
  56.     AppendResMenu(GetMenuHandle(mApple), 'DRVR');
  57.     DrawMenuBar();
  58.  
  59.     gDialog = GetNewDialog(128, nil, (WindowPtr)-1);
  60.     if (gDialog == nil) return;
  61.     GetPort(&oldPort);
  62.     SetPort(gDialog);
  63.  
  64.     GetDialogItem(gDialog, iControl, &itemType, &itemHan, &itemRect);
  65.     SetControlValue((ControlHandle)itemHan, myPrefs.activateModifiers & controlKey);
  66.     GetDialogItem(gDialog, iOption, &itemType, &itemHan, &itemRect);
  67.     SetControlValue((ControlHandle)itemHan, myPrefs.activateModifiers & optionKey);
  68.     GetDialogItem(gDialog, iShift, &itemType, &itemHan, &itemRect);
  69.     SetControlValue((ControlHandle)itemHan, myPrefs.activateModifiers & shiftKey);
  70.     GetDialogItem(gDialog, iCommand, &itemType, &itemHan, &itemRect);
  71.     SetControlValue((ControlHandle)itemHan, myPrefs.activateModifiers & cmdKey);
  72.  
  73.     GetDialogItem(gDialog, iSwitch, &itemType, &itemHan, &itemRect);
  74.     SetControlValue((ControlHandle)itemHan, myPrefs.switchToFinder);
  75.     GetDialogItem(gDialog, iHideApps, &itemType, &itemHan, &itemRect);
  76.     SetControlValue((ControlHandle)itemHan, myPrefs.hideApps);
  77.  
  78. {
  79.     Str255 sizeStr;
  80.     GetDialogItem(gDialog, iSize, &itemType, &itemHan, &itemRect);
  81.     NumToString(myPrefs.spotlightSize, sizeStr);
  82.     SetDialogItemText(itemHan, sizeStr);
  83.     SelectDialogItemText(gDialog, iSize, 0, 32767);
  84. }
  85.     
  86.     ShowWindow(gDialog);
  87.  
  88.     gQuitting = false;
  89.     EventLoop();
  90.  
  91.     PrefsSave(&myPrefs);
  92.     if (globptr != nil) {
  93.         globptr->prefs = myPrefs;
  94.         CALL_ZERO_PARAMETER_UPP(globptr->makeSpotlightUPP, uppMakeSpotlightInfo);
  95.     }
  96.  
  97.     DisposeDialog(gDialog);
  98.     SetPort(oldPort);
  99. }
  100.  
  101. void EventLoop(void) {
  102.     EventRecord event;
  103.     Boolean gotEvent;
  104.     
  105.     while (!gQuitting) {
  106.         gotEvent = WaitNextEvent(everyEvent, &event, 10, nil);
  107.         if (IsDialogEvent(&event)) {
  108.             short itemHit;
  109.             
  110.             if ((event.what == keyDown || event.what == autoKey) && (event.modifiers & cmdKey)) {
  111.                 DoMenuCommand(MenuKey(event.message & charCodeMask));
  112.             }
  113.             else {
  114.                 DialogSelect(&event, &gDialog, &itemHit);
  115.                 switch (itemHit) {
  116.                     case iControl:
  117.                     case iOption:
  118.                     case iShift:
  119.                     case iCommand: 
  120.                     case iSwitch:
  121.                     case iHideApps: {
  122.                         Handle itemHan;
  123.                         Rect itemRect;
  124.                         short itemType;
  125.                         
  126.                         GetDialogItem(gDialog, itemHit, &itemType, &itemHan, &itemRect);
  127.                         SetControlValue((ControlHandle)itemHan, !GetControlValue((ControlHandle)itemHan));
  128.                         
  129.                         break;
  130.                     }
  131.                 }            
  132.             }
  133.         }
  134.         else if (gotEvent) {
  135.             switch (event.what) {
  136.                 case mouseDown:
  137.                     DoMouseDown(&event);
  138.                     break;                
  139.                 case osEvt:
  140.                     SetCursor(&qd.arrow);
  141.                     break;
  142.                 case diskEvt:
  143.                     if (HiWord(event.message) != noErr) {
  144.                         Point pt;
  145.                         SetPt(&pt, 100, 100);
  146.                         DIBadMount(pt, event.message);
  147.                     }
  148.                     break;    
  149.             }
  150.         }
  151.     }
  152. }
  153.  
  154. void DoMouseDown(EventRecord *event) {
  155.     WindowPtr    window;
  156.     SInt16        part;
  157.  
  158.     part = FindWindow(event->where, &window);
  159.     switch (part) {
  160.         case inMenuBar:
  161.             DoMenuCommand(MenuSelect(event->where));
  162.             break;
  163.         case inSysWindow:
  164.             SystemClick(event, window);
  165.             break;
  166.         case inDrag:
  167.             DragWindow(window, event->where, &qd.screenBits.bounds);
  168.             SelectWindow(window);
  169.             break;
  170.         case inContent:
  171.             if (window != FrontWindow()) SelectWindow(window);
  172.             break;
  173.         case inGoAway:
  174.             if (TrackGoAway(window, event->where)) AttemptQuit();
  175.             break;
  176.     } 
  177. }
  178.  
  179. void DoMenuCommand(long result) {
  180.     SInt16    menu, item;
  181.     Str255 str;
  182.  
  183.     menu = HiWord(result);
  184.     item = LoWord(result);
  185.  
  186.     switch (menu) {
  187.         case mApple:
  188.             switch (item) {
  189.                 case iAbout:
  190.                     Alert(129, nil);
  191.                     break;
  192.                 default:
  193.                     GetMenuItemText(GetMenuHandle(mApple), item, str);
  194.                     OpenDeskAcc(str);                    
  195.             }
  196.             break;
  197.         case mFile:
  198.             switch (item) {
  199.                 case iClose:
  200.                 case iQuit:
  201.                     AttemptQuit();
  202.                     break;
  203.             }
  204.             break;
  205.     }
  206.     
  207.     HiliteMenu(0);
  208. }
  209.  
  210. void AttemptQuit(void) {
  211.     Handle itemHan;
  212.     short itemType;
  213.     Rect itemRect;
  214.     
  215.     long num;
  216.     Str255 str;
  217.  
  218.     myPrefs.activateModifiers = myPrefs.disableModifiers = 0;
  219.  
  220.     GetDialogItem(gDialog, iControl, &itemType, &itemHan, &itemRect);
  221.     if (GetControlValue((ControlHandle)itemHan)) {
  222.         myPrefs.activateModifiers |= controlKey;
  223.         myPrefs.disableModifiers |= controlKey | rightControlKey;
  224.     }
  225.     GetDialogItem(gDialog, iOption, &itemType, &itemHan, &itemRect);
  226.     if (GetControlValue((ControlHandle)itemHan)) {
  227.         myPrefs.activateModifiers |= optionKey;
  228.         myPrefs.disableModifiers |= optionKey | rightOptionKey;
  229.     }
  230.     GetDialogItem(gDialog, iShift, &itemType, &itemHan, &itemRect);
  231.     if (GetControlValue((ControlHandle)itemHan)) {
  232.         myPrefs.activateModifiers |= shiftKey;
  233.         myPrefs.disableModifiers |= shiftKey | rightShiftKey;
  234.     }
  235.     GetDialogItem(gDialog, iCommand, &itemType, &itemHan, &itemRect);
  236.     if (GetControlValue((ControlHandle)itemHan)) {
  237.         myPrefs.activateModifiers |= cmdKey;
  238.         myPrefs.disableModifiers |= cmdKey;
  239.     }
  240.  
  241.     if (myPrefs.activateModifiers == 0) {
  242.         SysBeep(10);
  243.         return;
  244.     }
  245.  
  246.     GetDialogItem(gDialog, iSwitch, &itemType, &itemHan, &itemRect);
  247.     myPrefs.switchToFinder = GetControlValue((ControlHandle)itemHan);
  248.     GetDialogItem(gDialog, iHideApps, &itemType, &itemHan, &itemRect);
  249.     myPrefs.hideApps = GetControlValue((ControlHandle)itemHan);
  250.     
  251.     GetDialogItem(gDialog, iSize, &itemType, &itemHan, &itemRect);
  252.     GetDialogItemText(itemHan, str);
  253.     StringToNum(str, &num);
  254.     myPrefs.spotlightSize = num;
  255.     
  256.     if (myPrefs.spotlightSize < 10) {
  257.         SetDialogItemText(itemHan, "\p10");
  258.         SelectDialogItemText(gDialog, iSize, 0, 32767);
  259.         SysBeep(10);
  260.     }
  261.     else if (myPrefs.spotlightSize > 500) {
  262.         SetDialogItemText(itemHan, "\p500");
  263.         SelectDialogItemText(gDialog, iSize, 0, 32767);
  264.         SysBeep(10);
  265.     }
  266.     else {
  267.         gQuitting = true;
  268.     }
  269. }